package org.mcflier.appuntamento.data.model.interfaces;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

import org.mcflier.appuntamento.data.model.AlternativeTitle;
import org.mcflier.appuntamento.data.model.Genre;
import org.mcflier.appuntamento.data.model.Production;
import org.mcflier.appuntamento.i18n.Country;
import org.mcflier.appuntamento.i18n.Language;

public interface IMovie {
	
	public String getId();
	
	public String getOriginalName();
	
	public void setOriginalName(String originalName);
	
	public AlternativeTitle getAlternativeName();
	
	public void setAlternativeName(AlternativeTitle alternativeName);
	
	public String getOverview();
	
	public void setOverview(String overview);
	
	public String getHomepage();
	
	public void setHomepage(String homepage);
	
	public String getTagline();
	
	public void setTagline(String tagline);
	
	public String getPosterPath();
	
	public void setPosterPath(String posterPath);
	
	public Date getReleaseDate();
	
	public void setReleaseDate(Date releaseDate);
	
	public int getRuntime();
	
	public void setRuntime(int runtime);
	
	public boolean isTracing();
	
	public void setTracing(boolean tracing);
	
	public String getAddedBy();
	
	public void setAddedBy(String addingSource);
	
	public Timestamp getAddedDate();
	
	public void setAddedDate(Timestamp date);
	
	public Language getTracingLanguage();
	
	public void setTracingLanguage(Language language);
	
	public boolean isTraced();
	
	public void setTraced(boolean traced);
	
	public Timestamp getTracedDate();
	
	public void setTracedDate(Timestamp date);
	
	public String getTracedSource();
	
	public void setTracedSource(String tracedSource);
	
	public String getDownloadLink();
	
	public void setDownloadLink(String link);
	
	//Collections
	
	//Production
	public void addProduction(Production production);
	
	public Production getProduction(int id);
	
	public Production getProduction(String name);
	
	public List<Production> getProductions();
	
	public Production removeProduction(int id);
	
	public void removeAllProductions();
	
	//Genre
	public void addGenre(Genre genre);
	
	public Genre getGenre(int id);
	
	public List<Genre> getGenres();
	
	public Genre removeGenre(int id);
	
	public void removeAllGenres();
	
	//Production Country
	public void addProductionCountry(Country country);
	
	public Country getProductionCountry(String code);
	
	public List<Country> getProductionCountries();
	
	public Country removeProductionCountry(String code);
	
	public void removeAllProductionCountries();
}
